home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Information / CSMP Digest / volume 3 / csmp-digest-v3-079 < prev    next >
Internet Message Format  |  1995-12-31  |  47KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-079
  3. To: csmp-digest@ens.fr
  4. Date: Wed, 18 Jan 1995 10:12:11 +0100 (MET)
  5. Mime-Version: 1.0
  6. Reply-To: pottier@clipper.ens.fr
  7. X-Sequence: 85
  8.  
  9. C.S.M.P. Digest             Wed, 18 Jan 95       Volume 3 : Issue 79
  10.  
  11. Today's Topics:
  12.  
  13.         Allocating Memory in a Constructor?
  14.         Drag and Drop Promised Flavors
  15.         PB call for copying files?
  16.         Some Inside Macintosh available via WWW and anon FTP
  17.         Speech Manager docs?
  18.         What global is at memory location $03A4 or $03B4?
  19.         Writing Fat plug-ins (on 68k platform)
  20.         [Q] Color Notification icon?
  21.  
  22.  
  23.  
  24. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  25. (pottier@clipper.ens.fr).
  26.  
  27. The digest is a collection of article threads from the internet newsgroup
  28. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  29. regularly and want an archive of the discussions.  If you don't know what a
  30. newsgroup is, you probably don't have access to it.  Ask your systems
  31. administrator(s) for details.  If you don't have access to news, you may
  32. still be able to post messages to the group by using a mail server like
  33. anon.penet.fi (mail help@anon.penet.fi for more information).
  34.  
  35. Each issue of the digest contains one or more sets of articles (called
  36. threads), with each set corresponding to a 'discussion' of a particular
  37. subject.  The articles are not edited; all articles included in this digest
  38. are in their original posted form (as received by our news server at
  39. nef.ens.fr).  Article threads are not added to the digest until the last
  40. article added to the thread is at least two weeks old (this is to ensure that
  41. the thread is dead before adding it to the digest).  Article threads that
  42. consist of only one message are generally not included in the digest.
  43.  
  44. The digest is officially distributed by two means, by email and ftp.
  45.  
  46. If you want to receive the digest by mail, send email to listserv@ens.fr
  47. with no subject and one of the following commands as body:
  48.     help                                Sends you a summary of commands
  49.     subscribe csmp-digest Your Name     Adds you to the mailing list
  50.     signoff csmp-digest                 Removes you from the list
  51. Once you have subscribed, you will automatically receive each new
  52. issue as it is created.
  53.  
  54. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  55. Questions related to the ftp site should be directed to
  56. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  57. digest are available there.
  58.  
  59. Also, the digests are available to WAIS users.  To search back issues
  60. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  61. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  62.  
  63.  
  64. -------------------------------------------------------
  65.  
  66. >From bb@lightside.com (Bob Bradley)
  67. Subject: Allocating Memory in a Constructor?
  68. Date: Thu, 15 Dec 1994 21:36:56 -0800
  69. Organization: SS Software Inc.
  70.  
  71. I've read that you're not supposed to allocate memory in a constructor for
  72. a class cause it can't return a value (like the error) but, is it ok to
  73. pass in the address of an OSErr and have a constructor that allocates
  74. memory just write the that address so you can test it when the constructor
  75. returns? Like this:
  76.  
  77. TClass::TClass( OSErr *constructorError )
  78. {
  79.     Handle             myHandle;
  80.  
  81.     myHandle          = NewHandle( 1 );
  82.     *constructorError = MemError();
  83. }
  84.  
  85. Is that ok?
  86.  
  87. +++++++++++++++++++++++++++
  88.  
  89. >From rmah@panix.com (Robert Mah)
  90. Date: Fri, 16 Dec 1994 13:48:11 -0500
  91. Organization: One Step Beyond
  92.  
  93. bb@lightside.com (Bob Bradley) wrote:
  94.  
  95. ) I've read that you're not supposed to allocate memory in a constructor for
  96. ) a class cause it can't return a value (like the error) but, is it ok to
  97. ) pass in the address of an OSErr and have a constructor that allocates
  98. ) memory just write the that address so you can test it when the constructor
  99. ) returns? Like this:
  100. ) TClass::TClass( OSErr *constructorError )
  101. ) {
  102. )     Handle             myHandle;
  103. )     myHandle          = NewHandle( 1 );
  104. )     *constructorError = MemError();
  105. ) }
  106. ) Is that ok?
  107.  
  108. Well, yes, but then that means, your code will go something like this...
  109.  
  110.     OSErr  err;
  111.     TClass cobj(&err);
  112.  
  113.     if( err == noErr )
  114.         ....
  115.  
  116. So, why not just do...
  117.  
  118.     TClass cobj;
  119.     if( cobj.Init() == noErr )
  120.         ....
  121.  
  122. Contstructors are NOT initializers.  They should only be used to put
  123. the object into a consistant and usable state.  IOW, just assign NULL
  124. to myHandle.
  125.  
  126. Cheers,
  127. Rob
  128. _______________________________________________________________________
  129. Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  130. One Step Beyond         and Network Consulting           rmah@panix.com
  131.  
  132. +++++++++++++++++++++++++++
  133.  
  134. >From tulip@tiac.net (Ed Anson)
  135. Date: Fri, 16 Dec 1994 13:28:54 -0500
  136. Organization: Tulip Software
  137.  
  138. In article <bb-1512942136560001@user30.lightside.com>, bb@lightside.com
  139. (Bob Bradley) wrote:
  140.  
  141. > I've read that you're not supposed to allocate memory in a constructor for
  142. > a class cause it can't return a value (like the error) but, is it ok to
  143. > pass in the address of an OSErr and have a constructor that allocates
  144. > memory just write the that address so you can test it when the constructor
  145. > returns? Like this:
  146. > TClass::TClass( OSErr *constructorError )
  147. > {
  148. >     Handle             myHandle;
  149. >     myHandle          = NewHandle( 1 );
  150. >     *constructorError = MemError();
  151. > }
  152. > Is that ok?
  153.  
  154. It might work -- most of the time.
  155.  
  156. The real problem with allocating memory in a constructor has nothing to do
  157. with the ability to return a result. After all, you could just as easily
  158. place the result in a field of the object.
  159.  
  160. It is very important that you do nothing inside a constructor that can
  161. fail to leave the new object fully constructed. In other words, when an
  162. object is created, the constructor must return with the object in a state
  163. that makes sense. Otherwise, attempts to use or destroy that object might
  164. not make sense.
  165.  
  166. Typically, anything that can fail (such as memory allocation) is handled
  167. by a second phase of initialization that follows the constructor. If the
  168. second phase fails, you can still destroy the object if necessary.
  169.  
  170. IHTH
  171.  
  172. -- 
  173. Ed Anson
  174. President
  175. Tulip Software
  176. PO Box 3046
  177. Andover, MA 01810
  178. U.S.A.
  179. tulip@tiac.net
  180. 508-475-8711
  181.  
  182. +++++++++++++++++++++++++++
  183.  
  184. >From chopps@water.emich.edu (Christian E. Hopps)
  185. Date: 21 Dec 1994 06:45:42 GMT
  186. Organization: University of Michigan EECS Dept.
  187.  
  188. Robert Mah (rmah@panix.com) wrote:
  189. : Well, yes, but then that means, your code will go something like this...
  190.  
  191. :     OSErr  err;
  192. :     TClass cobj(&err);
  193.  
  194. :     if( err == noErr )
  195. :         ....
  196.  
  197. : So, why not just do...
  198.  
  199. :     TClass cobj;
  200. :     if( cobj.Init() == noErr )
  201. :         ....
  202.  
  203. or
  204.         try {
  205.                 TClass cobj;
  206.                 ...
  207.         } catch (memerr& err) {
  208.                 ...
  209.         } catch (...) {
  210.                 ...
  211.         }
  212.  
  213. Hmm but we don't have exception handling yet now do we :)
  214.  
  215. : Contstructors are NOT initializers.  They should only be used to put
  216. : the object into a consistant and usable state.  IOW, just assign NULL
  217. : to myHandle.
  218.  
  219. I disagree with this.  Constructors in C++ are intended to be initializers
  220. otherwise they would not take arguements (just one reason.)  Besides
  221. if the object depends upon that handle pointing to something then
  222. the object is less than usable if the handle is NULL.  I will admit
  223. that C++ is also intended to include exception handling.
  224.  
  225. Exceptions are named properly.  They are intended to handle "exceptional"
  226. conditions.  I wish we had exception handling in Mac C++ compilers becuase
  227. it trully moves the exceptional conditional code away from the code
  228. that executes >99% of the time.  In most implementations exceptions
  229. are handled with some form of setjmp()/longjmp() type scheme which
  230. is decidedly faster than a million if (err's) and multiple initialization
  231. calls not to mention cleaner.
  232.  
  233. Chris.
  234.  
  235. BTW I derive all my classes from a root class that looks something like:
  236.         class root_t {
  237.         protected:
  238.                 int ok;
  239.                 ...
  240.         public:
  241.                 root_t()        { ok = 1; }
  242.                 int isok()      { return (ok); }
  243.                 ...
  244.         };
  245. Each derived class's constructor then looks like:
  246.         der_t:der_t()
  247.         {
  248.                 d_handle = NULL;
  249.                 ...
  250.                 if (ok == 0)
  251.                         return;
  252.                 if ((d_handle = NewSomething()) == NULL)
  253.                         ok = 0;
  254.         }
  255. It seems to work ok and allows a general checking scheme for all
  256. objects.
  257.         der_t object;
  258.  
  259.         if (object.isok() == 0)
  260.                 ...
  261.  
  262. +++++++++++++++++++++++++++
  263.  
  264. >From tulip@tiac.net (Ed Anson)
  265. Date: Wed, 21 Dec 1994 16:54:04 -0500
  266. Organization: Tulip Software
  267.  
  268. In article <3d8ium$di8@zip.eecs.umich.edu>, chopps@water.emich.edu
  269. (Christian E. Hopps) wrote:
  270.  
  271. > : Contstructors are NOT initializers.  They should only be used to put
  272. > : the object into a consistant and usable state.  IOW, just assign NULL
  273. > : to myHandle.
  274. > I disagree with this.  Constructors in C++ are intended to be initializers
  275.  
  276. Then you are wrong. General good practice dictates that nothing capable of
  277. generating an exception should be included in a constructor.
  278.  
  279. > BTW I derive all my classes from a root class that looks something like:
  280. >         class root_t {
  281. >         protected:
  282. >                 int ok;
  283. >                 ...
  284. >         public:
  285. >                 root_t()        { ok = 1; }
  286. >                 int isok()      { return (ok); }
  287. >                 ...
  288. >         };
  289. > Each derived class's constructor then looks like:
  290. >         der_t:der_t()
  291. >         {
  292. >                 d_handle = NULL;
  293. >                 ...
  294. >                 if (ok == 0)
  295. >                         return;
  296. >                 if ((d_handle = NewSomething()) == NULL)
  297. >                         ok = 0;
  298. >         }
  299. > It seems to work ok and allows a general checking scheme for all
  300. > objects.
  301. >         der_t object;
  302. >         if (object.isok() == 0)
  303. >                 ...
  304.  
  305. The main problem with this is that, should allocation fail, you have no
  306. clean way to destroy the object because it is not fully constructed.
  307. That's why good practice dictates as I mentioned above.
  308.  
  309. I ususally use my constructor to set all pointers (handles, etc.) to NIL.
  310. My class design takes NIL pointers into account and treats them as a valid
  311. state. If any real use of the object requires something other than NIL,
  312. then that is set up after the constructor has finished.
  313.  
  314. This is a bit inconvenient, but not nearly so inconvenient as trying to
  315. unravel a partially constructed object in case of an exception.
  316.  
  317. - -----------------------------------------------------------------
  318. Ed Anson                InterNet: tulip@tiac.net
  319. Tulip Software          voice: 508-475-8711
  320. PO Box 3046
  321. Andover, MA 01810       <http://www.tiac.net/users/tulip/home.html>
  322. U.S.A.
  323. Ed Anson
  324. President
  325. Tulip Software
  326. PO Box 3046
  327. Andover, MA 01810
  328. U.S.A.
  329. tulip@tiac.net
  330. 508-475-8711
  331.  
  332. +++++++++++++++++++++++++++
  333.  
  334. >From Jaeger@fquest.com (Brian Stern)
  335. Date: 22 Dec 1994 01:45:39 GMT
  336. Organization: The University of Texas at Austin, Austin, Texas
  337.  
  338. In article <tulip-2112941654040001@tulip.tiac.net>, tulip@tiac.net (Ed
  339. Anson) wrote:
  340. < I ususally use my constructor to set all pointers (handles, etc.) to NIL.
  341. < My class design takes NIL pointers into account and treats them as a valid
  342. < state. If any real use of the object requires something other than NIL,
  343. < then that is set up after the constructor has finished.
  344. < This is a bit inconvenient, but not nearly so inconvenient as trying to
  345. < unravel a partially constructed object in case of an exception.
  346. < -------------------------------------------------------------------
  347. < Ed Anson                InterNet: tulip@tiac.net
  348.  
  349. What's wrong with first setting all your handles to nil and then trying to
  350. allocate them in the constructor?  In this case the object will always be
  351. in a consistent state.
  352.  
  353. -- 
  354. Brian  Stern  :-{)}
  355. Toolbox commando and Menu bard
  356. Jaeger@fquest.com
  357.  
  358. +++++++++++++++++++++++++++
  359.  
  360. >From rmah@panix.com (Robert Mah)
  361. Date: Thu, 22 Dec 1994 00:00:30 -0500
  362. Organization: One Step Beyond
  363.  
  364. Jaeger@fquest.com (Brian Stern) wrote:
  365.  
  366. ) tulip@tiac.net (Ed Anson) wrote:
  367. ) < 
  368. ) < I ususally use my constructor to set all pointers (handles, etc.) to
  369. ) < NIL.  My class design takes NIL pointers into account and treats them
  370. ) < as a valid state. If any real use of the object requires something
  371. ) < other than NIL, then that is set up after the constructor has finished.
  372. ) What's wrong with first setting all your handles to nil and then trying
  373. ) to allocate them in the constructor?  In this case the object will always
  374. ) be in a consistent state.
  375.  
  376. To quote from the great Bjarne, font (fount?) of all that is true, wise
  377. and good about that mystical and arcane tongue we call "C++",
  378.  
  379.  "An object is not considered constructed until its constructor has
  380.   completed. Then and only then will stack unwinding call the destructor
  381.   for the object.
  382.   [...]
  383.   A well written constructor should ensure that its object is completely
  384.   and correctly constructed.  Failing that, the constructor should -- as
  385.   far as possible -- restore the state of the system to what it was
  386.   before creation.  It would be ideal for naively written constructors
  387.   always to achieve on of these alternatives and not leave their objects
  388.   in some 'half constructed' state."
  389.  
  390.   -- Bjarne Stroustrup, "The C++ Programming Language, Second Edition",
  391.      pp. 309-310
  392.  
  393. This is in the chapter about exception handling, in the section regarding
  394. resource aquisition.  Precisely the topic at hand.
  395.  
  396. As an example of the dangers involved, take a look at the following, 
  397. innocuous looking, code...
  398.  
  399.   class TC { 
  400.     char *p;
  401.   public:
  402.     TC()          { p = NULL; p = AllocSomething(); }
  403.     virtual ~TC() { if( p != NULL ) FreeSomething( p ); }
  404.   };
  405.  
  406. This class could result in memory leaks if an exception is thrown inside
  407. AllocSomething().  Since the object is not fully constructed, the 
  408. exception handling mechanism might not call the destructor for the object.
  409. It gets more complicated if you throw in multiple inheritance.
  410.  
  411. Besides, if you allocate memory (i.e. do the "initialzation") in the 
  412. ctor, then you preclude the ability of sub-classes from overriding the
  413. behaviour of the initialization.
  414.  
  415. I know it is tempting to use ctor's as "initializers".  Don't sucumb to
  416. temptation.  Ctors should only be used to put the object into a safe and
  417. consistant state.  Nothing else.  Until you know all the ins and outs of
  418. how C++ works, it is not safe to violate this rule.  
  419.  
  420. It takes a long time and a lot of reading to learn C++ well.  After
  421. three years of fairly heavy use, I still learn new things every day (or
  422. at least every week anyway) and only now am I starting to consider myself
  423. barely proficient.  With luck, I'll be "proficient" in a few more years.
  424.  
  425. Cheers,
  426. Rob
  427. _______________________________________________________________________
  428. Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  429. One Step Beyond         and Network Consulting           rmah@panix.com
  430.  
  431. +++++++++++++++++++++++++++
  432.  
  433. >From chopps@water.emich.edu (Christian E. Hopps)
  434. Date: 22 Dec 1994 06:48:43 GMT
  435. Organization: University of Michigan EECS Dept.
  436.  
  437. Ed Anson (tulip@tiac.net) wrote:
  438. : In article <3d8ium$di8@zip.eecs.umich.edu>, chopps@water.emich.edu
  439. : (Christian E. Hopps) wrote:
  440. : > BTW I derive all my classes from a root class that looks something like:
  441. : >         class root_t {
  442. : >         protected:
  443. : >                 int ok;
  444. : >                 ...
  445. : >         public:
  446. : >                 root_t()        { ok = 1; }
  447. : >                 int isok()      { return (ok); }
  448. : >                 ...
  449. : >         };
  450. : > Each derived class's constructor then looks like:
  451. : >         der_t:der_t()
  452. : >         {
  453. : >                 d_handle = NULL;
  454. : >                 ...
  455. : >                 if (ok == 0)
  456. : >                         return;
  457. : >                 if ((d_handle = NewSomething()) == NULL)
  458. : >                         ok = 0;
  459. : >         }
  460. : > It seems to work ok and allows a general checking scheme for all
  461. : > objects.
  462. : >         der_t object;
  463. : > 
  464. : >         if (object.isok() == 0)
  465. : >                 ...
  466.  
  467. : The main problem with this is that, should allocation fail, you have no
  468. : clean way to destroy the object because it is not fully constructed.
  469. : That's why good practice dictates as I mentioned above.
  470.  
  471. I think its pretty clear in the code fragment I gave that I *do* leave
  472. the object in a consistent state (setting d_handle to NULL)  If d_handle
  473. is not null then it should be disposed of.  If at the point of init the
  474. object is not ok no further init happens.
  475.  
  476. : I ususally use my constructor to set all pointers (handles, etc.) to NIL.
  477. : My class design takes NIL pointers into account and treats them as a valid
  478. : state. If any real use of the object requires something other than NIL,
  479. : then that is set up after the constructor has finished.
  480.  
  481. My desgin above treats NULL (nil? :) pointers as an invalid exceptional state.
  482. It does deal with them in cleanup, however any object that depends on
  483. a non-NULL pointer has no reason to work with them.  If an object is in
  484. this exceptional state then it has failed to construct and cannot be used
  485. - -simple.  
  486.  
  487. I do have classes of objects that *can* work with NULL pointers but thats
  488. different.  In that case the state of the object is not considered
  489. exceptional or invalid and the object just operates within that different
  490. state.
  491.  
  492. Chris.
  493.  
  494. +++++++++++++++++++++++++++
  495.  
  496. >From tulip@tiac.net (Ed Anson)
  497. Date: Thu, 22 Dec 1994 13:13:08 -0500
  498. Organization: Tulip Software
  499.  
  500. In article <Jaeger-2112941951490001@slip-16-7.ots.utexas.edu>,
  501. Jaeger@fquest.com (Brian Stern) wrote:
  502.  
  503. > In article <tulip-2112941654040001@tulip.tiac.net>, tulip@tiac.net (Ed
  504. > Anson) wrote:
  505. > < 
  506. > < I ususally use my constructor to set all pointers (handles, etc.) to NIL.
  507. > < My class design takes NIL pointers into account and treats them as a valid
  508. > < state. If any real use of the object requires something other than NIL,
  509. > < then that is set up after the constructor has finished.
  510. > < 
  511. > < This is a bit inconvenient, but not nearly so inconvenient as trying to
  512. > < unravel a partially constructed object in case of an exception.
  513. > < 
  514. > < -------------------------------------------------------------------
  515. > < Ed Anson                InterNet: tulip@tiac.net
  516. > What's wrong with first setting all your handles to nil and then trying to
  517. > allocate them in the constructor?  In this case the object will always be
  518. > in a consistent state.
  519.  
  520. Maybe. Maybe not. If some handles get set, and others remain NIL, you
  521. could have a mess on your hands. For example, it could be really difficult
  522. to maintain a consistent model of the object when random handles might be
  523. NIL even though others have been assigned values. It's not impossible --
  524. just too difficult to be worth the trouble.
  525.  
  526. Of course, there are many ways to solve any particular problem. I am
  527. referring to an approach that has worked well for me over the years, and
  528. happens to be the most generally accepted good practice.
  529.  
  530. - -----------------------------------------------------------------
  531. Ed Anson                InterNet: tulip@tiac.net
  532. Tulip Software          voice: 508-475-8711
  533. PO Box 3046                Check out my WWW page!
  534. Andover, MA 01810       <http://www.tiac.net/users/tulip/home.html>
  535. U.S.A.
  536. Ed Anson
  537. President
  538. Tulip Software
  539. PO Box 3046
  540. Andover, MA 01810
  541. U.S.A.
  542. tulip@tiac.net
  543. 508-475-8711
  544.  
  545. +++++++++++++++++++++++++++
  546.  
  547. >From rwong@jessica.stanford.edu (Rick Wong)
  548. Date: Thu, 22 Dec 1994 12:28:23 -0700
  549. Organization: Stanford University
  550.  
  551. I read in "Taligent's Guide to Designing Programs," p. 77, that
  552. the ISO/ANSI draft specification is currently silent on what
  553. happens if an exception occurs while constructing an object
  554. allocated with new.  Taligent states that the prevailing opinion
  555. is that operator delete should be called in such situations,
  556. because there would otherwise be no way to completely recover.
  557. (Of course, since no Mac C++ compilers support exceptions,
  558. this is a moot point for us anyway.)
  559.  
  560. <flamebait>
  561. Does it strike anyone as odd that there's a debate at all about
  562. something as fundamental as object initialization?  The intent
  563. of the construction protocol is obviously to provide a well-
  564. defined, safe, and convenient way to initialize objects.  I
  565. don't think it meets any of those criteria.
  566.  
  567. The construction protocol, like so much else in C++, is half-
  568. baked, and has led to a number of "C++ idioms" concerning
  569. construction.  In the spirit of freedom, you ought to be able
  570. to initialize objects in a way that is natural, including
  571. allocating any memory needed by the object.  That C++ does
  572. not currently allow you to do so safely indicates to me a
  573. bad design.
  574. </flamebait>
  575.  
  576. Rick "fast and bulbous" Wong
  577.  
  578. +++++++++++++++++++++++++++
  579.  
  580. >From sandvik@apple.com (Kent Sandvik)
  581. Date: Wed, 28 Dec 1994 20:44:24 -0800
  582. Organization: Apple Computer, Inc. Developer Technical Support
  583.  
  584. In article <rmah-1612941348110001@rmah.dialup.access.net>, rmah@panix.com
  585. (Robert Mah) wrote:
  586. > Contstructors are NOT initializers.  They should only be used to put
  587. > the object into a consistant and usable state.  IOW, just assign NULL
  588. > to myHandle.
  589.  
  590. True, most C++ frameworks have a method call Initialize or something
  591. similar that returns false if something failed. The forthcoming exception
  592. model in C++ should to some degree eliminate this situation. Constructor
  593. (and destructors) are funny, you could never know what happened inside one
  594. of those, unless you wrote explicit error checking for states.
  595.  
  596. Cheers, Kent
  597.  
  598. -- 
  599. Kent Sandvik   sandvik@apple.com   New Media Analyst/Programmer
  600. Private activities on Internet.
  601.  
  602. ---------------------------
  603.  
  604. >From madhack@aol.com (MadHack)
  605. Subject: Drag and Drop Promised Flavors
  606. Date: 29 Dec 1994 23:53:41 -0500
  607. Organization: America Online, Inc. (1-800-827-6364)
  608.  
  609. I've been working with the Drag & Drop manager for a bit and was wondering
  610. if anyone has figured out how to promise a flavor other than phfs. For
  611. example, say I want to promise a pict and the application that recieves
  612. the drop can call me to get it rather than creating the PICT instantly and
  613. passing that off to the Drag Manager.
  614.  
  615. - Gus (MadHack@aol.com)
  616.  
  617. +++++++++++++++++++++++++++
  618.  
  619. >From blm@coho.halcyon.com (Brian L. Matthews)
  620. Date: 30 Dec 1994 18:00:25 GMT
  621. Organization: NW NEXUS, Inc. -- Internet Made Easy (206) 455-3505
  622.  
  623. In article <3e03ol$k7k@newsbf02.news.aol.com>, MadHack <madhack@aol.com> wrote:
  624. |I've been working with the Drag & Drop manager for a bit and was wondering
  625. |if anyone has figured out how to promise a flavor other than phfs. For
  626. |example, say I want to promise a pict and the application that recieves
  627. |the drop can call me to get it rather than creating the PICT instantly and
  628. |passing that off to the Drag Manager.
  629.  
  630. Just passing 0 for the data pointer and size will do it.  For example,
  631. to promise a PICT when you're setting dragRef up for TrackDrag, do:
  632.  
  633.     AddDragItemFlavor (dragRef, itemRef, 'PICT', 0, 0, 0);
  634.  
  635. When (if) someone accepts the drag, the drag send proc you set with
  636. SetDragSendProc is called by the drag manager thusly:
  637.  
  638.     dragSendProc ('PICT', refCon, itemRef, dragRef);
  639.  
  640. In dragSendProc, you do something like:
  641.  
  642.     SetDragItemFlavorData (dragRef, itemRef, flavorType, Ptr (*picHandle),
  643.         GetHandleSize (Handle (picHandle)), 0);
  644.  
  645. (after checking that flavorType and itemRef are correct, etc.)
  646.  
  647. Brian
  648. --
  649. Brian L. Matthews                                       blm@halcyon.com
  650.   You can't have a syntax error with a hammer.
  651.  
  652. ---------------------------
  653.  
  654. >From psmy@io.org (Phil Smy)
  655. Subject: PB call for copying files?
  656. Date: Thu, 29 Dec 1994 21:20:18 -0500
  657. Organization: InfiNet
  658.  
  659. Is there a PB (or FS) call to copy as file from one disk to another? I
  660. would think that I wouldn't have to read in all the contents and then
  661. write it all out again.
  662.  
  663. I have tried using PBHCopyFile (see example), but I keep getting a -50
  664. error (which Think Ref says is no default volume(!))
  665.  
  666.    pb.ioCompletion = nil;
  667.    pb.ioNamePtr = origName;
  668.    pb.ioVRefNum = sourceFile->GetVolRefNum();
  669.    pb.ioDstVRefNum = tmpVRefNum;
  670.    pb.ioNewName =origName; // keep the same name
  671.    pb.ioCopyName = nil;
  672.    pb.ioNewDirID = tmpDirID;
  673.    pb.ioDirID = sourceFile->GetDirID();
  674.    
  675.    FailOSErr(PBHCopyFile((HParmBlkPtr)&pb,async)); 
  676.  
  677. All the other PB call I've looked at (PBHRename, PBCatMove, etc.) seem to
  678. all say that you can't move from one disk to another.
  679.  
  680. Am I just dreaming here?
  681.  
  682. Thanks in advance.
  683.  
  684. Humbly yours,
  685.  
  686. Phil Smy
  687.  
  688. -- 
  689. *******************
  690. * Not a signature *
  691. *******************
  692.  
  693. +++++++++++++++++++++++++++
  694.  
  695. >From mclow@san_marcos.csusm.edu (Marshall Clow)
  696. Date: Thu, 29 Dec 1994 20:51:26 -0800
  697. Organization: Aladdin Systems
  698.  
  699. In article <psmy-2912942120180001@h-turquoise.richmond.infi.net>,
  700. psmy@io.org (Phil Smy) wrote:
  701.  
  702. > Is there a PB (or FS) call to copy as file from one disk to another? I
  703. > would think that I wouldn't have to read in all the contents and then
  704. > write it all out again.
  705. > I have tried using PBHCopyFile (see example), but I keep getting a -50
  706. > error (which Think Ref says is no default volume(!))
  707.  
  708. If you read the docs for PBHCopyFile, it says that it only works when the
  709. source and the dest are on the same AppleShare server.
  710.  
  711. If you need a routine to copy a file, look at Jim Luther's "MoreFiles"
  712. package. A set of libraries for file manipulations. Source is availiable
  713. at and ftp site near you.
  714.  
  715. -- Marshall
  716.  
  717. -- 
  718. Marshall Clow
  719. Aladdin Systems
  720. mclow@san_marcos.csusm.edu
  721.  
  722. ---------------------------
  723.  
  724. >From becked@cortez.its.rpi.edu (Douglas Edward Becker)
  725. Subject: Some Inside Macintosh available via WWW and anon FTP
  726. Date: 2 Jan 1995 05:41:33 GMT
  727. Organization: Rensselaer Polytechnic Institute, Troy NY
  728.  
  729. It appears that Apple has decided to let certain volumes of Inside Mac be
  730. available via anonymous FTP at ftp.info.apple.com. A nice WWW interface 
  731. is at:
  732. http://www.info.apple.com/dev/insidemac.html
  733. It looks like they're releasing the basic programming manuals, but not the
  734. more "optional" volumes. Sounds smart to me. Even better, the WWW page
  735. claims that HTML versions will be available in Spring '95! (They may want
  736. to get some mirror sites if they do this...)
  737. I just found this while searching around on their site. I haven't seen
  738. anything from Apple about this. I hope I'm not jumping the gun or anything,
  739. but it's there...
  740.  
  741.  - Doug Becker
  742.  
  743.  
  744. ---------------------------
  745.  
  746. >From dejal@iconz.co.nz (David Sinclair)
  747. Subject: Speech Manager docs?
  748. Date: 2 Jan 1995 01:49:52 GMT
  749. Organization: iconz, Auckland, New Zealand
  750.  
  751. I'm looking for the Speech Manager documentation: can someone please 
  752. point me to an ftp site & directory, or post the documentation on the 
  753. Speech Manager calls here?  (If you want to e-mail, please do so to my 
  754. AMUG address, dejal@amug.org -- thanks.)
  755.  
  756. David Sinclair
  757.  
  758. --
  759.  
  760. |\  ._   .  _  .     Dejal Userware  |  dejal@iconz.co.nz  (preferred)
  761. | | |_   | |_| |     PO Box 33-1011  |  dejal@deepthnk.kiwi.gen.nz
  762. |/  |_ \_| | | |_    Takapuna        |  ftp ftp.amug.org ... cd /pub/dejal
  763. - ---------------    Auckland 1309   |  http://amug.org:80/~dejal/
  764.  U S E R W A R E     New Zealand     |  100033.2435@compuserve.com
  765. - ---------------
  766.  
  767. Author of SndConverter Pro, SndPlayer, QuickEncrypt, TextMerge, TextSplitter
  768. and other Shareware and Freeware products for the Macintosh.
  769.  
  770. +++++++++++++++++++++++++++
  771.  
  772. >From Jaeger@fquest.com (Brian Stern)
  773. Date: 2 Jan 1995 15:46:59 GMT
  774. Organization: The University of Texas at Austin, Austin, Texas
  775.  
  776. In article <3e7m40$qq7@status>, dejal@iconz.co.nz (David Sinclair) wrote:
  777.  
  778. < I'm looking for the Speech Manager documentation: can someone please 
  779. < point me to an ftp site & directory, or post the documentation on the 
  780. < Speech Manager calls here?  (If you want to e-mail, please do so to my 
  781. < AMUG address, dejal@amug.org -- thanks.)
  782. <  
  783. < David Sinclair
  784. <  
  785. < --
  786. <  
  787. < |\  ._   .  _  .     Dejal Userware  |  dejal@iconz.co.nz  (preferred)
  788. < | | |_   | |_| |     PO Box 33-1011  |  dejal@deepthnk.kiwi.gen.nz
  789. < |/  |_ \_| | | |_    Takapuna        |  ftp ftp.amug.org ... cd /pub/dejal
  790. < -----------------    Auckland 1309   |  http://amug.org:80/~dejal/
  791. <  U S E R W A R E     New Zealand     |  100033.2435@compuserve.com
  792. < -----------------
  793. < Author of SndConverter Pro, SndPlayer, QuickEncrypt, TextMerge, TextSplitter
  794. < and other Shareware and Freeware products for the Macintosh.
  795.  
  796. ftp://ftp.apple.com/dts/mac/sys.soft/speech/speech-manager-docs.hqx
  797.  
  798. -- 
  799. Brian  Stern  :-{)}
  800. Toolbox commando and Menu bard
  801. Jaeger@fquest.com
  802.  
  803. ---------------------------
  804.  
  805. >From rmah@panix.com (Robert Mah)
  806. Subject: What global is at memory location $03A4 or $03B4?
  807. Date: Thu, 29 Dec 1994 18:18:54 -0500
  808. Organization: One Step Beyond
  809.  
  810. Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  811. getting stuck in a tight loop waiting for the word at $03B4 to be set
  812. to zero.
  813.  
  814. The code is something like...
  815.  
  816.     TST.W  $0010(a0)
  817.     BGT.S  *-$0004
  818.  
  819. ...where a0 contains $03A4.
  820.  
  821. What is $03A4 or $03B4?
  822.  
  823. Cheers,
  824. Rob
  825. _______________________________________________________________________
  826. Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  827. One Step Beyond         and Network Consulting           rmah@panix.com
  828.  
  829. +++++++++++++++++++++++++++
  830.  
  831. >From hawkfish@halcyon.com (Richard Wesley)
  832. Date: 30 Dec 1994 03:18:12 GMT
  833. Organization: Punch Deck Consulting
  834.  
  835. In article <rmah-2912941818540001@rmah.dialup.access.net>
  836. rmah@panix.com (Robert Mah) writes:
  837.  
  838. > Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  839. > getting stuck in a tight loop waiting for the word at $03B4 to be set
  840. > to zero.
  841. > The code is something like...
  842. >     TST.W  $0010(a0)
  843. >     BGT.S  *-$0004
  844. > ...where a0 contains $03A4.
  845. > What is $03A4 or $03B4?
  846. > Cheers,
  847. > Rob
  848. > _______________________________________________________________________
  849. > Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  850. > One Step Beyond         and Network Consulting           rmah@panix.com
  851.  
  852. TMON calls these "Parms" and "Parms+10".  I seem to recall that the file
  853. manager(?) uses them internally for making parameter blocks for internal calls
  854. (or at least it used to). They may just be general TB scratch space.  God only
  855. knows what the rules for using them (if any) were.
  856.  
  857. Sorry to be so vague, it was long, long ago, in a brain far, far away...
  858.  
  859. - rmgw
  860.  
  861. - ------------------------------------------------------------------------------
  862.  
  863. Richard Wesley     hawkfish@halcyon.com | "If we're not careful, we could have
  864. Punch Deck Consulting  pnchdeck@aol.com |  a farce on our hands!"
  865.      Macintosh Software Development     |    - Tom Stoppard, "On the Razzle"
  866. - ------------------------------------------------------------------------------
  867.  
  868.  
  869. +++++++++++++++++++++++++++
  870.  
  871. >From hawkfish@halcyon.com (Richard Wesley)
  872. Date: 30 Dec 1994 03:24:36 GMT
  873. Organization: Punch Deck Consulting
  874.  
  875. In article <rmah-2912941818540001@rmah.dialup.access.net>
  876. rmah@panix.com (Robert Mah) writes:
  877. > Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  878. > getting stuck in a tight loop waiting for the word at $03B4 to be set
  879. > to zero.
  880. > The code is something like...
  881. >     TST.W  $0010(a0)
  882. >     BGT.S  *-$0004
  883. > ...where a0 contains $03A4.
  884. > What is $03A4 or $03B4?
  885.  
  886. After poking around in TMON some more, I was able to confirm that this is used
  887. as scratch space by the File Manager.  There is a snippet of code in MountVol
  888. (in my PB165 ROM) that loads Params into A0 and calls _Status.
  889.  
  890. - rmgw
  891.  
  892. - ------------------------------------------------------------------------------
  893.  
  894. Richard Wesley     hawkfish@halcyon.com | "If we're not careful, we could have
  895. Punch Deck Consulting  pnchdeck@aol.com |  a farce on our hands!"
  896.      Macintosh Software Development     |    - Tom Stoppard, "On the Razzle"
  897. - ------------------------------------------------------------------------------
  898.  
  899.  
  900. +++++++++++++++++++++++++++
  901.  
  902. >From hawkfish@halcyon.com (Richard Wesley)
  903. Date: 30 Dec 1994 03:35:11 GMT
  904. Organization: Punch Deck Consulting
  905.  
  906. In article <rmah-2912941818540001@rmah.dialup.access.net>
  907. rmah@panix.com (Robert Mah) writes:
  908.  
  909. > Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  910. > getting stuck in a tight loop waiting for the word at $03B4 to be set
  911. > to zero.
  912. > The code is something like...
  913. >     TST.W  $0010(a0)
  914. >     BGT.S  *-$0004
  915. > ...where a0 contains $03A4.
  916. > What is $03A4 or $03B4?
  917.  
  918. After poking around in TMON some more, I was able to confirm that this is used
  919. as scratch space by the File Manager.  There is a snippet of code in MountVol
  920. (in my PB165 ROM) that loads Params into A0 and calls _Status.
  921.  
  922. - rmgw
  923.  
  924. - ------------------------------------------------------------------------------
  925.  
  926. Richard Wesley     hawkfish@halcyon.com | "If we're not careful, we could have
  927. Punch Deck Consulting  pnchdeck@aol.com |  a farce on our hands!"
  928.      Macintosh Software Development     |    - Tom Stoppard, "On the Razzle"
  929. - ------------------------------------------------------------------------------
  930.  
  931.  
  932. +++++++++++++++++++++++++++
  933.  
  934. >From mindvision@mindvision.com (Steve Kiene)
  935. Date: Thu, 29 Dec 1994 21:50:32 -0700
  936. Organization: MindVision Software
  937.  
  938. In article <rmah-2912941818540001@rmah.dialup.access.net>, rmah@panix.com
  939. (Robert Mah) wrote:
  940.  
  941. > Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  942. > getting stuck in a tight loop waiting for the word at $03B4 to be set
  943. > to zero.
  944. > The code is something like...
  945. >     TST.W  $0010(a0)
  946. >     BGT.S  *-$0004
  947. > ...where a0 contains $03A4.
  948. > What is $03A4 or $03B4?
  949.  
  950. $3a4 is the start of the global OS parameter block for Device/File Manager
  951. calls. $3b4 is the ioResult field of that parameter block. It's waiting
  952. for the call to be completed by the OS when it's sitting in that loop.
  953.  
  954. Steve Kiene
  955. MindVision Software
  956.  
  957. +++++++++++++++++++++++++++
  958.  
  959. >From Mark.R.Valence@dartmouth.edu (kurash@dartmouth.edu)
  960. Date: 30 Dec 1994 05:00:31 GMT
  961. Organization: Dartmouth College, Hanover, NH
  962.  
  963. In article <rmah-2912941818540001@rmah.dialup.access.net>
  964. rmah@panix.com (Robert Mah) writes:
  965. > Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  966. > getting stuck in a tight loop waiting for the word at $03B4 to be set
  967. > to zero.
  968. > The code is something like...
  969. >     TST.W  $0010(a0)
  970. >     BGT.S  *-$0004
  971. > ...where a0 contains $03A4.
  972. > What is $03A4 or $03B4?
  973. > Cheers,
  974. > Rob
  975. > _______________________________________________________________________
  976. > Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  977. > One Step Beyond         and Network Consulting           rmah@panix.com
  978.  
  979. The global at $03A4 is called Params, and is used by the File Manager
  980. for scratch space.  Specifically, it is used as a parameter block.  The
  981. code you have above is a sync-wait loop:  someone is waiting for a file
  982. or device call to complete by polling ioResult (which is $10 bytes from
  983. the start of the parameter block stored in A0).  The system will do
  984. this any time a file or device call is made syncronously, and other
  985. programs do it as well after making async calls.  The loop is actually
  986. waiting for ioResult to go zero or negative (GT means greater than
  987. zero, signed test).
  988.  
  989. MacTCP has (had?  I wonder if they have fixed this...) a design bug
  990. that causes a lock-up when an async echo-request is made in a VBL task.
  991.  This is a pretty rare occurance, but you mentioned MacTCP, and the
  992. lock-up is due to a never-ending sync-wait loop.
  993.  
  994. I have seen three main reasons for getting locked in a loop like this:
  995.  
  996. 1)  some parameter block being used was deallocated before the call
  997. competed ("deallocation" applies to stack pbs as well as heap pbs). 
  998. This will usually only happen to pb's that are issued asyncronously,
  999. but can happen with sync pb's as well.  Especially likely when a
  1000. program crashes or exits abnormally during a file system or device
  1001. call.
  1002.  
  1003. 2)  a program or driver turned off interrupts or set some system
  1004. semaphore and is waiting for the call to complete, but completion
  1005. depends on interrupts being enabled or the semaphore being cleared
  1006. (this is the case with the MacTCP bug).
  1007.  
  1008. 3)  a parameter block was re-used before the first call completed. 
  1009. This can happen for various reasons, but most times I've seen are
  1010. because the file system was improperly called during interrupt time.
  1011.  
  1012. Because the pb in question is a Params, I would strongly suspect (3). 
  1013. If you are es'ing out of a program in MacsBug, or get an "unexpected
  1014. quit" message before you get the lock-up, then look no further.  If
  1015. your Mac locks without prodding, then you need to look at the
  1016. programs/extensions that are running.  One of them has a bug (duh, no
  1017. kidding).  Do you care to tell us what you are running?
  1018.  
  1019. Mark.
  1020.  
  1021. - --------------------------------------------------------------------
  1022. "On the Internet, nobody knows you're a dog."   Ice Peak Form Mice Elf
  1023.                     -- cartoon in New Yorker
  1024.  
  1025. +++++++++++++++++++++++++++
  1026.  
  1027. >From rmah@panix.com (Robert Mah)
  1028. Date: Fri, 30 Dec 1994 18:43:52 -0500
  1029. Organization: One Step Beyond
  1030.  
  1031. Mark.R.Valence@dartmouth.edu (kurash@dartmouth.edu) wrote:
  1032.  
  1033. ) rmah@panix.com (Robert Mah) writes:
  1034. ) > Lately I've noticed that MacTCP 2.0.6 (or something related to it) is 
  1035. ) > getting stuck in a tight loop waiting for the word at $03B4 to be set
  1036. ) > to zero.
  1037. ) > 
  1038. ) > The code is something like...
  1039. ) > 
  1040. ) >     TST.W  $0010(a0)
  1041. ) >     BGT.S  *-$0004
  1042. ) > 
  1043. ) > ...where a0 contains $03A4.
  1044. ) > 
  1045. ) > What is $03A4 or $03B4?
  1046. ) The global at $03A4 is called Params, and is used by the File Manager
  1047. ) for scratch space.  Specifically, it is used as a parameter block.  The
  1048. ) code you have above is a sync-wait loop:  someone is waiting for a file
  1049. ) or device call to complete by polling ioResult (which is $10 bytes from
  1050. ) ...
  1051. ) MacTCP has (had?  I wonder if they have fixed this...) a design bug
  1052. ) that causes a lock-up when an async echo-request is made in a VBL task.
  1053. ) This is a pretty rare occurance, but you mentioned MacTCP, and the
  1054. ) lock-up is due to a never-ending sync-wait loop.
  1055.  
  1056. Ah ha!  This makes sense because I have MacPPP generating echo packets
  1057. every 20 seconds.  In addition, when the machine locks up, MacPPP will
  1058. usually disconnect after a short time and I once noticed a PPP Echo
  1059. failure message.
  1060.  
  1061. Now, why this never happened before I don't know...but it currently seems
  1062. to afflict my Mac near the end of large file transfers.
  1063.  
  1064. Hopefully turning off the ping feature will fix things for me.
  1065.  
  1066. Thanks to everyone who replied -- have a happy New Years.
  1067.  
  1068. Cheers,
  1069. Rob
  1070. _______________________________________________________________________
  1071. Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  1072. One Step Beyond         and Network Consulting           rmah@panix.com
  1073.  
  1074. ---------------------------
  1075.  
  1076. >From ikb_macd@ece.concordia.ca (Keith MacDonald)
  1077. Subject: Writing Fat plug-ins (on 68k platform)
  1078. Date: 16 Dec 1994 16:22:01 GMT
  1079. Organization: ECE - Concordia University
  1080.  
  1081. I've written a 68k application which is extensible via plug-ins (code 
  1082. resources).  I know that I'd like to write some fat or PPCnative-only
  1083. plug-ins in the near future.  Is it completely unreasonable to expect 
  1084. to be able to develop fat/PPC native code without a PowerMac? (would
  1085. be using MetroWerks)
  1086.  
  1087. Also, I understand that PPC code is in the data fork - does it sound
  1088. possible to put the PPC calling code into the 68k part of a plug-in
  1089. rather than change my application's plug-in calling code?
  1090.  
  1091. I don't have CodeWarrior yet, but am about to release this program 
  1092. and am wondering if a significant amount of work will have to be
  1093. done to allow the program to have fat/native plug-ins.  Didn't
  1094. Photoshop release a native plug-in for a 68k version?
  1095.  
  1096. All comments appreciated,
  1097. Keith
  1098. ___________________________________________________________________________
  1099.  Keith MacDonald                                       Computer Engineering
  1100.  ikb_macd@ECE.concordia.ca                             Concordia University
  1101.  http://www.ece.concordia.ca/~ikb_macd/addr.html       Montreal, QC, Canada
  1102.  
  1103. +++++++++++++++++++++++++++
  1104.  
  1105. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  1106. Date: Sat, 17 Dec 1994 16:34:52 +1300 (NZDT)
  1107. Organization: (none)
  1108.  
  1109. ikb_macd@ece.concordia.ca (Keith MacDonald) writes:
  1110. > I've written a 68k application which is extensible via plug-ins (code 
  1111. > resources).  I know that I'd like to write some fat or PPCnative-only
  1112. > plug-ins in the near future.  Is it completely unreasonable to expect 
  1113. > to be able to develop fat/PPC native code without a PowerMac? (would
  1114. > be using MetroWerks)
  1115. > Also, I understand that PPC code is in the data fork - does it sound
  1116. > possible to put the PPC calling code into the 68k part of a plug-in
  1117. > rather than change my application's plug-in calling code?
  1118. > I don't have CodeWarrior yet, but am about to release this program 
  1119. > and am wondering if a significant amount of work will have to be
  1120. > done to allow the program to have fat/native plug-ins.  Didn't
  1121. > Photoshop release a native plug-in for a 68k version?
  1122.  
  1123. It is possible to write PPC plug-ins which are compatable with your
  1124. *existing* program.  Look up "accelerated resources" in _Inside Mac:
  1125. PowerPC System Software_.
  1126.  
  1127. Basically, what happens is that the resource starts off as 68K code
  1128. and executes a special 68K trap that switches to PPC native mode,
  1129. and the remainder of the code is PPC.
  1130.  
  1131. You can compile and build PPC programs on a 68K Mac, with either MPW
  1132. or CodeWarrior (or Symantec I suppose -- I gave up on them more than
  1133. six months ago).  Of course you won't be able to *test* it... :-)
  1134.  
  1135. -- Bruce
  1136.  
  1137. +++++++++++++++++++++++++++
  1138.  
  1139. >From sandvik@apple.com (Kent Sandvik)
  1140. Date: Wed, 28 Dec 1994 20:42:54 -0800
  1141. Organization: Apple Computer, Inc. Developer Technical Support
  1142.  
  1143. In article <3cser9$4nc@newsflash.concordia.ca>, ikb_macd@ece.concordia.ca
  1144. (Keith MacDonald) wrote:
  1145.  
  1146. > I've written a 68k application which is extensible via plug-ins (code 
  1147. > resources).  I know that I'd like to write some fat or PPCnative-only
  1148. > plug-ins in the near future.  Is it completely unreasonable to expect 
  1149. > to be able to develop fat/PPC native code without a PowerMac? (would
  1150. > be using MetroWerks)
  1151. > Also, I understand that PPC code is in the data fork - does it sound
  1152. > possible to put the PPC calling code into the 68k part of a plug-in
  1153. > rather than change my application's plug-in calling code?
  1154.  
  1155. I think all this is doable, but I would recommend to wait for the CFM68k
  1156. environment, as CFM is the most natural way to write extensions for both
  1157. platforms, long term.
  1158.  
  1159. Cheers, Kent
  1160.  
  1161. -- 
  1162. Kent Sandvik   sandvik@apple.com   New Media Analyst/Programmer
  1163. Private activities on Internet.
  1164.  
  1165. +++++++++++++++++++++++++++
  1166.  
  1167. >From malcolm@interval.com (Malcolm Slaney)
  1168. Date: Thu, 29 Dec 1994 11:24:48 -0800
  1169. Organization: Interval Research
  1170.  
  1171. > In article <3cser9$4nc@newsflash.concordia.ca>, ikb_macd@ece.concordia.ca
  1172. > (Keith MacDonald) wrote:
  1173. > > Also, I understand that PPC code is in the data fork - does it sound
  1174. > > possible to put the PPC calling code into the 68k part of a plug-in
  1175. > > rather than change my application's plug-in calling code?
  1176.  
  1177. Works just fine!
  1178.  
  1179. MathWorks uses code resources for their 68k extensions, and code-fragments
  1180. on the PPC.  It works just great to put both in the same file!  I expect
  1181. the same trick would work for HyperCard and PhotoShop, if they choose to
  1182. do things this way.
  1183.  
  1184. -- Malcolm
  1185.  
  1186. +++++++++++++++++++++++++++
  1187.  
  1188. >From oster@netcom.com (David Phillip Oster)
  1189. Date: Sat, 31 Dec 1994 07:12:03 GMT
  1190. Organization: Netcom Online Communications Services (408-241-9760 login: guest)
  1191.  
  1192. In article <3cser9$4nc@newsflash.concordia.ca>, ikb_macd@ece.concordia.ca
  1193. (Keith MacDonald) wrote:
  1194.  
  1195. > I've written a 68k application which is extensible via plug-ins (code 
  1196. > resources).  I know that I'd like to write some fat or PPCnative-only
  1197. > plug-ins in the near future.  Is it completely unreasonable to expect 
  1198. > to be able to develop fat/PPC native code without a PowerMac? (would
  1199. > be using MetroWerks)
  1200.  
  1201. > Also, I understand that PPC code is in the data fork - does it sound
  1202. > possible to put the PPC calling code into the 68k part of a plug-in
  1203. > rather than change my application's plug-in calling code?
  1204.  
  1205. If you check out the Metrowerks CD, you'll find a file called MixedMode.r
  1206. in the Apple Development tools section of the disk. You copy
  1207. and edit the file. It defines an executable code resource, compiled
  1208. by Rez, which inforporates, in the resource, 68000 and PowerPC code.
  1209. You call it just like any 68000 plug-in, and it determines whether the
  1210. actual processor is a 68000 or a PowerPC, and jumps into the appropriate
  1211. code. It also modifies itself, so if you call that in-memory copy again,
  1212. the second time just jumps directly to the correct code.  It handles the
  1213. caches on the 68040 correctly.
  1214. -- 
  1215. - ------- oster@netcom.com ----------
  1216. "A man hears what he wants to hear and misremembers the rest."
  1217.      -- Paul Simon, ("The Boxer")
  1218.  
  1219.  
  1220. ---------------------------
  1221.  
  1222. >From tbrown@news.dorsai.org (Tommy Brown)
  1223. Subject: [Q] Color Notification icon?
  1224. Date: Mon, 2 Jan 1995 21:02:11 GMT
  1225. Organization: The Dorsai Embassy - New York
  1226.  
  1227. NMInstall takes a notification record whose nmIcon is supposed to be a 
  1228. handl eot a SICN resource, which is black and white only. Yet, obviously, 
  1229. I have seen applications rotate their color icons in the application 
  1230. menu. How is this done? I've looked through the sample code and the NIM 
  1231. on the latest bookmark CD to no avail. Thanks!
  1232.  
  1233. --
  1234. Tommy Brown                 | When one thing is predicated of another, all
  1235. tbrown@dorsai.org           | that which is predicable of the predicate will
  1236. tbrown@minerva.cis.yale.edu | be predicable also of the subject. -- Aristotle
  1237. zipit@softlock.com          | --> finger tbrown@dorsai.org for ZipIt info <--
  1238.  
  1239. +++++++++++++++++++++++++++
  1240.  
  1241. >From baclark@wwa.com (Brian Clark)
  1242. Date: Mon, 02 Jan 1995 16:39:14 -0600
  1243. Organization: Value-Added Ltd.
  1244.  
  1245. In article <D1sqFo.FCC@dorsai.org>, tbrown@news.dorsai.org (Tommy Brown) wrote:
  1246.  
  1247. > NMInstall takes a notification record whose nmIcon is supposed to be a 
  1248. > handl eot a SICN resource, which is black and white only. Yet, obviously, 
  1249. > I have seen applications rotate their color icons in the application 
  1250. > menu. How is this done? I've looked through the sample code and the NIM 
  1251. > on the latest bookmark CD to no avail. Thanks!
  1252.  
  1253. Use GetIconSuite (using svAllSmallData), and set the NMRec's mnIcon field
  1254. to the handle you get.
  1255.  
  1256. ---------------------------
  1257.  
  1258. End of C.S.M.P. Digest
  1259. **********************
  1260.